package com.Maykk.Demo12;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.OptionalDouble;
import java.util.OptionalInt;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.ToIntFunction;

/**
 * @ClassName: Demo06
 * @Description: TODO Stream 中间流 && 结束流
 * @Author: MaykkStar@163.com
 */
public class Demo06 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        initList(list);

        list.forEach(System.out::println); // 遍历输出 list
        System.out.println("''''''''''''''''''''''''");
        System.out.println("按照自然规则排序输出");
        list.stream().sorted().forEach(System.out::println);
        System.out.println("''''''''''''''''''''''''");

        System.out.println("自定义规则排序输出");
        // list.stream().sorted((o1, o2) -> o1.length() - o2.length()).forEach(System.out::println);
        list.stream().sorted(Comparator.comparingInt(String::length)).forEach(System.out::println);
        System.out.println("''''''''''''''''''''''''");

        System.out.println("按照字符串对应数值进行排序");
        // list.stream().sorted((o1, o2) -> Integer.parseInt(o1) - Integer.parseInt(o2)).forEach(System.out::println);
        list.stream().sorted(Comparator.comparing(Integer::parseInt)).forEach(System.out::println);
        System.out.println("''''''''''''''''''''''''");

        // 求和
        int sum = list.stream().mapToInt(Integer::parseInt).sum();
        System.out.println("求和：" + sum);
        System.out.println("''''''''''''''''''''''''");
        // 求平均值
        OptionalDouble average = list.stream().mapToInt(Integer::parseInt).average();
        System.out.println("平均值：" + average.toString());
        System.out.println("''''''''''''''''''''''''");
        // 统计
        long count = list.stream().map((s) -> " ").count();
        System.out.println(count);
        System.out.println("''''''''''''''''''''''''");

        // 最大值\最小值
        OptionalInt max = list.stream().mapToInt(Integer::parseInt).max();
        System.out.println(max);
        OptionalInt min = list.stream().mapToInt(Integer::parseInt).min();
        System.out.println(min);

        // 类型转换 使用 gatAsInt 转换为 int 类型
        int asInt = list.stream().mapToInt(Integer::parseInt).max().getAsInt();
        OptionalInt maxInt = list.stream().mapToInt(Integer::parseInt).max();
    }

    private static void initList(ArrayList<String> list) {
        list.add("3456789");
        list.add("6789");
        list.add("23456789");
        list.add("789");
        list.add("456789");
        list.add("56789");
        list.add("123456789");
    }
}
